#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>
#include <cmath>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
#define endl '\n'
const int N = 15;

int a, b; 
int dp[N][N][N];
void init()
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; j++)
        {
            for(int k = 0; k < N; k++)
            {
                dp[i][j][k] = -1;
            }
        }
    }
}
// num : 0 - num 的windy数
// offset ：用于提取 num 的第 len 位
// len ：从右到左第 len 位
// free：当前数字是否可以随便选择
int f(int num, int offset, int pre, int len, int free)
{
    if(num == 0) return 1;
    if(len == 0) 
    {
        // 不同管pre，假设前面什么都没选就是0
        return 1;
    }
    if(dp[pre][len][free] != -1) return dp[pre][len][free];
    int ans = 0;
    int cur = num / offset % 10;
    if(free == 0)
    {
        // 当前数字不能随便选择
        if(pre == 10)
        {
            // 前面没有选择过数字，此时就是num本身
            ans += f(num, offset / 10, 10, len - 1, 1); // 接着不选
            for(int i = 1; i < cur; i++)
            {
                ans += f(num, offset / 10, i, len - 1, 1);
            }
            ans += f(num, offset / 10, cur, len - 1, 0);
        }
        else
        {
            // 前面选择过数字
            for(int i = 0; i < cur; i++)
            {
                if(abs(i - pre) >= 2)
                {
                    ans += f(num, offset / 10, i, len - 1, 1);
                }
            }
            if(abs(cur - pre) >= 2) ans += f(num, offset / 10, cur, len - 1, 0);
        }
    }
    else // 可以随便选择
    {
        if(pre == 10)
        {
            // 前面还是没有选择过数字
            ans += f(num, offset / 10, 10, len - 1, 1); // 接着不选
            for(int i = 1; i <= 9; i++)
            {
                ans += f(num, offset / 10, i, len - 1, 1);
            }
        }
        else
        {
            // 前面选择过数字
            for(int i = 0; i <= 9; i++)
            {
                if(abs(i - pre) >= 2)
                {
                    ans += f(num, offset / 10, i, len - 1, 1);
                }
            }            
        }
    }
    return dp[pre][len][free] = ans;
}

void solve() 
{
    cin >> a >> b;
    a--;
    int len = 1;
    int offset = 1;
    int tmp = b / 10;
    while(tmp)
    {
        tmp /= 10;
        len++;
        offset *= 10;
    }
    init();
    // 由于前面什么都没选初始pre传入10，上一位和num一致free传入0表示不能随便选。 
    int cnt1 = f(b, offset, 10, len, 0);
    len = 1;
    offset = 1;
    tmp = a / 10;
    while(tmp)
    {
        tmp /= 10;
        len++;
        offset *= 10;
    }
    init();
    int cnt2 = f(a, offset, 10, len, 0);
    cout << cnt1 - cnt2 << endl;
}

int main()
{
    ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    int T = 1;
	// cin >> T;
	while(T--)
	{
        solve();
	}
	return 0;
}